JMeter 压力测试
什么是 JMeter
JMeter 是开源软件Apache基金会下的一个性能测试工具,用来测试部署在服务器端的应用程序的性能。
JMeter 主要用于测试 Web 应用程序或 FTP应用程序,但目前,它适用于功能测试,JDBC数据库连接,Web服务,通用TCP连接和OS本机进程。它可以执行各种测试活动,如性能,负载,压力,回归和功能测试,用于 Web服务器获得准确的性能指标。
以下是 JMeter支持的协议列表:
- Web - HTTP, HTTPS (Java, NodeJS, PHP, ASP .NET,...)
- SOAP / REST Webservices
- FTP
- Database via JDBC
- LDAP
- Message-oriented Middleware (MOM) via JMS
- Mail - SMTP(S), POP3(S) and IMAP(S)
- Native commands or shell scripts
- TCP
- Java Objects
JMeter 与 Ab 区别
之前学习过一个 Apache 出的压力测试工具 Apache Bench,它们两者有什么区别呢?
ab 可以提供需要的基本性能指标;但是缺点就是没有图形化结果,不能监控。
JMeter 可以告诉你每个请求实际上耗费多长时间。AB 只是简单的用数学方式统计平均值。所以从准确性来说,JMeter比 ab更准确,更多如数据处理。
但是 ab的速度更快,更轻巧。如果性能测试的目的在于更真实的表现被测应用,那么 JMeter 更佳,但如仅仅是用最少的机器资源产生最多的访问请求,那 ab 适合
安装配置
先到 官网下载 解压安装
官网就有切换镜像的功能,最好换成 hk 的镜像服务器,不然下载很慢(当然,换了也巨慢)
下载好了点这个 jmeter.bat
启动窗口
添加虚拟用户组
如下图所示,右击 “测试计划” > 添加 > Threads(Users)> 线程组。
“线程组”的意思:JMeter是由Java实现的,并且使用一个Java线程来模拟一个用户,因此线程组(Thread Group)就是指一组用户的意思,换句话说一个线程组就是一组虚拟用户(virtual users),这些虚拟用户用来模拟访问被测系统。
线程数: 这里就是指虚拟用户数,默认的输入是“1”,则表明模拟一个虚拟用户访问被测系统,如果想模拟100个用户,则此处输入100。
Ramp-Up Period (in seconds): 虚拟用户增长时长。比如测试的是一个考勤系统,那么实际用户登录使用考勤系统的时候并不是大家喊1、2、3 - 走起,然后一起登录。实际使用场景可能是9点钟上班,那么从8:30开始,考勤系统会陆陆续续有人开始登录,直到9:10左右,那么如果完全按照用户的使用场景,设计该测试的时候此处应输入40(分钟)* 60(秒)= 2400。但是实际测试一般不会设置如此长的 Ramp-Up 时间,原因嘛,难道你做一次测试要先等上40分钟做登录操作?一般情况下,可以估计出登录频率最高的时间长度,比如此处可能从8:55到9:00登录的人最多,那这里设置成300秒,如果“线程数”输入为100,则意味着在5分钟内100用户登录完毕。
循环次数: 该处设置一个虚拟用户做多少次的测试。默认为1,意味着一个虚拟用户做完一遍事情之后,该虚拟用户停止运行。如果选中“永远”,则意味着测试运行起来之后就根本停不下来了,除非你把它强制咔嚓。
如下这样就是两万并发
添加被测页面
接下来的一步就是要加入实际被测页面,右击 “线程组” > “添加” > “取样器” > “HTTP请求”。
配置好点击启动就可以开始测试了
注意,这个日志查看最好勾上
就能在控制台看到日志了
如果想要直观的显示,点这个查看结果树(也可以使用其它的看)
如下使用的图形结果